package com.ehsy.statement;


import com.dtflys.forest.exceptions.ForestNetworkException;
import com.dtflys.forest.http.ForestResponse;
import com.ehsy.service.SuccessfulCodeService;
import org.junit.jupiter.api.Test;
import org.springframework.boot.test.context.SpringBootTest;

import javax.annotation.Resource;

/**
 * @author YanZhen_Li
 * @version 1.0
 * @title A22异常处理
 * @description
 * @create 2024/6/19 17:09
 */
@SpringBootTest
public class A22异常处理 {
    @Resource
    SuccessfulCodeService service;
    @Test
    public void test1() {
        /**
         * try-catch方式：捕获ForestNetworkException异常类的对象
         */
        try {
            String result = service.test01(500);
        } catch (ForestNetworkException ex) {
            int status = ex.getStatusCode(); // 获取请求响应状态码
            ForestResponse response = ex.getResponse(); // 获取Response对象
            String content = response.getContent(); // 获取请求的响应内容
            String resResult = response.getResult().toString(); // 获取方法返回类型对应的最终数据结果
            System.out.println("异常捕获结束");
        }
        System.out.println("方法执行结束");
    }

    /**
     * 回调函数出处理方式
     * ! 注意：加上OnError回调函数后便不会再向上抛出异常，所有错误信息均通过OnError回调函数的参数获得。
     */
    @Test
    public void test2() {
        service.test04(500, (ex, request, response) -> {
            int status = response.getStatusCode(); // 获取请求响应状态码
            String content = response.getContent(); // 获取请求的响应内容
            String result = response.getResult().toString(); // 获取方法返回类型对应的最终数据结果
            System.out.println("出现异常");
        });
        System.out.println("方法执行结束");
    }

    /**
     * ForestResponse 示例
     * 用`ForestResponse`类作为请求方法的返回值类型, 其泛型参数代表实际返回数据的类型
     */
    @Test
    public void test3(){
        ForestResponse<String> response = service.test05(500);
        // 用isError方法判断请求是否失败, 比如404, 500等情况
        if (response.isError()) {
            int status = response.getStatusCode(); // 获取请求响应状态码
            String content = response.getContent(); // 获取请求的响应内容
            String result = response.getResult(); // 获取方法返回类型对应的最终数据结果
            System.out.println("出现异常");
        }
        System.out.println("方法执行结束");
    }

    /**
     * ! 拦截器方式, 我们的拦截器中也有ForestResponse对象的传入，所以我们可以在拦截器中执行和test3相同的代码来处理异常
     */
}
